From 2f3955a20d7f5ce9ef06677107cba77fb8ee91ac Mon Sep 17 00:00:00 2001 From: jluner Date: Sat, 27 May 2017 02:21:48 -0500 Subject: [PATCH] Fix failing tests --- src/bin/cargo.rs | 4 +++- src/cargo/lib.rs | 6 +++-- src/cargo/ops/cargo_rustc/custom_build.rs | 7 +++--- src/cargo/sources/git/source.rs | 5 ++-- src/cargo/sources/git/utils.rs | 10 ++++---- src/cargo/util/errors.rs | 3 ++- src/cargo/util/process_builder.rs | 29 +++++++++++------------ tests/cargotest/support/mod.rs | 3 ++- 8 files changed, 38 insertions(+), 29 deletions(-) diff --git a/src/bin/cargo.rs b/src/bin/cargo.rs index 4c838a632..cbb8c48c8 100644 --- a/src/bin/cargo.rs +++ b/src/bin/cargo.rs @@ -84,7 +84,9 @@ fn main() { let result = (|| { let args: Vec<_> = try!(env::args_os() .map(|s| { - s.into_string().map_err(|s| CargoError::from(format!("invalid unicode in argument: {:?}", s))) + s.into_string().map_err(|s| { + CargoError::from(format!("invalid unicode in argument: {:?}", s)) + }) }) .collect()); let rest = &args; diff --git a/src/cargo/lib.rs b/src/cargo/lib.rs index 06eb8705a..a04836a46 100755 --- a/src/cargo/lib.rs +++ b/src/cargo/lib.rs @@ -206,7 +206,8 @@ pub fn handle_error(err: CargoError, shell: &mut MultiShell) { handle_cause(err, shell); } -fn handle_cause(cargo_err: E, shell: &mut MultiShell) -> bool where E: ChainedError + 'static { +fn handle_cause(cargo_err: E, shell: &mut MultiShell) -> bool + where E: ChainedError + 'static { fn print(error: String, shell: &mut MultiShell) { let _ = shell.err().say("\nCaused by:", BLACK); let _ = shell.err().say(format!(" {}", error), BLACK); @@ -237,7 +238,8 @@ fn handle_cause(cargo_err: E, shell: &mut MultiShell) -> bool where E: //Print remaining errors until one marked as Internal appears for err in cargo_err.iter().skip(1) { let err = unsafe { extend_lifetime(err) }; - if let Some(&CargoError(CargoErrorKind::Internal(..), ..)) = err.downcast_ref::() { + if let Some(&CargoError(CargoErrorKind::Internal(..), ..)) = + err.downcast_ref::() { return false; } diff --git a/src/cargo/ops/cargo_rustc/custom_build.rs b/src/cargo/ops/cargo_rustc/custom_build.rs index 12b87aa33..3e988865a 100644 --- a/src/cargo/ops/cargo_rustc/custom_build.rs +++ b/src/cargo/ops/cargo_rustc/custom_build.rs @@ -239,9 +239,10 @@ fn build_work<'a, 'cfg>(cx: &mut Context<'a, 'cfg>, unit: &Unit<'a>) &mut |out_line| { state.stdout(out_line); Ok(()) }, &mut |err_line| { state.stderr(err_line); Ok(()) }, ).map_err(|e| { - let desc = e.description().to_string(); - CargoError::with_chain(e, format!("failed to run custom build command for `{}`\n{}", - pkg_name, desc)) + CargoError::from( + format!("failed to run custom build command for `{}`\n{}", + pkg_name, e.description())) + })?; paths::write(&output_file, &output.stdout)?; diff --git a/src/cargo/sources/git/source.rs b/src/cargo/sources/git/source.rs index 326fa94f2..43a5605ee 100644 --- a/src/cargo/sources/git/source.rs +++ b/src/cargo/sources/git/source.rs @@ -5,7 +5,8 @@ use url::Url; use core::source::{Source, SourceId}; use core::GitReference; use core::{Package, PackageId, Summary, Registry, Dependency}; -use util::{CargoResult, Config}; +use util::Config; +use util::errors::{CargoError, CargoResult}; use util::hex::short_hash; use sources::PathSource; use sources::git::utils::{GitRemote, GitRevision}; @@ -147,7 +148,7 @@ impl<'cfg> Source for GitSource<'cfg> { trace!("updating git source `{:?}`", self.remote); let repo = self.remote.checkout(&db_path, self.config)?; - let rev = repo.rev_for(&self.reference)?; + let rev = repo.rev_for(&self.reference).map_err(CargoError::to_internal)?; (repo, rev) } else { (self.remote.db_at(&db_path)?, actual_rev.unwrap()) diff --git a/src/cargo/sources/git/utils.rs b/src/cargo/sources/git/utils.rs index 9052f7a14..35252e396 100644 --- a/src/cargo/sources/git/utils.rs +++ b/src/cargo/sources/git/utils.rs @@ -296,9 +296,11 @@ impl<'a> GitCheckout<'a> { info!("update submodules for: {:?}", repo.workdir().unwrap()); for mut child in repo.submodules()?.into_iter() { - update_submodule(repo, &mut child, cargo_config).chain_err(|| { - format!("failed to update submodule `{}`", - child.name().unwrap_or("")) + update_submodule(repo, &mut child, cargo_config) + .map_err(CargoError::to_internal) + .chain_err(|| { + format!("failed to update submodule `{}`", + child.name().unwrap_or("")) })?; } Ok(()) @@ -530,7 +532,7 @@ fn with_authentication(url: &str, cfg: &git2::Config, mut f: F) // In the case of an authentication failure (where we tried something) then // we try to give a more helpful error message about precisely what we // tried. - res.chain_err(|| { + res.map_err(CargoError::from).map_err(|e| e.to_internal()).chain_err(|| { let mut msg = "failed to authenticate when downloading \ repository".to_string(); if !ssh_agent_attempts.is_empty() { diff --git a/src/cargo/util/errors.rs b/src/cargo/util/errors.rs index 718e9619f..ef5e5e4e9 100644 --- a/src/cargo/util/errors.rs +++ b/src/cargo/util/errors.rs @@ -62,6 +62,7 @@ error_chain! { impl CargoError { pub fn to_internal(self) -> Self { + //This is actually bad, because it loses the cause information for foreign_link CargoError(CargoErrorKind::Internal(self.description().to_string()), self.1) } @@ -72,6 +73,7 @@ impl CargoError { &CargoErrorKind::TomlDe(_) => true, &CargoErrorKind::Curl(_) => true, &CargoErrorKind::HttpNot200(..) => true, + &CargoErrorKind::ProcessErrorKind(_) => true, &CargoErrorKind::CrateRegistry(_) | &CargoErrorKind::ParseSemver(_) | &CargoErrorKind::Semver(_) | @@ -83,7 +85,6 @@ impl CargoError { &CargoErrorKind::Parse(_) | &CargoErrorKind::Git(_) | &CargoErrorKind::Internal(_) | - &CargoErrorKind::ProcessErrorKind(_) | &CargoErrorKind::CargoTestErrorKind(_) => false } } diff --git a/src/cargo/util/process_builder.rs b/src/cargo/util/process_builder.rs index 4cb642b73..819771981 100644 --- a/src/cargo/util/process_builder.rs +++ b/src/cargo/util/process_builder.rs @@ -84,9 +84,9 @@ impl ProcessBuilder { if exit.success() { Ok(()) } else { - Err(CargoErrorKind::ProcessErrorKind(process_error(&format!("process didn't exit successfully: `{}`", - self.debug_string()), - Some(&exit), None)).into()) + Err(CargoErrorKind::ProcessErrorKind(process_error( + &format!("process didn't exit successfully: `{}`", self.debug_string()), + Some(&exit), None)).into()) } } @@ -97,9 +97,8 @@ impl ProcessBuilder { let mut command = self.build_command(); let error = command.exec(); Err(CargoError::with_chain(error, - CargoErrorKind::ProcessErrorKind( - process_error(&format!("could not execute process `{}`", - self.debug_string()), None, None)))) + CargoErrorKind::ProcessErrorKind(process_error( + &format!("could not execute process `{}`", self.debug_string()), None, None)))) } #[cfg(windows)] @@ -120,9 +119,9 @@ impl ProcessBuilder { if output.status.success() { Ok(output) } else { - Err(CargoErrorKind::ProcessErrorKind(process_error(&format!("process didn't exit successfully: `{}`", - self.debug_string()), - Some(&output.status), Some(&output))).into()) + Err(CargoErrorKind::ProcessErrorKind(process_error( + &format!("process didn't exit successfully: `{}`", self.debug_string()), + Some(&output.status), Some(&output))).into()) } } @@ -181,14 +180,14 @@ impl ProcessBuilder { status: status, }; if !output.status.success() { - Err(CargoErrorKind::ProcessErrorKind(process_error(&format!("process didn't exit successfully: `{}`", - self.debug_string()), - Some(&output.status), Some(&output))).into()) + Err(CargoErrorKind::ProcessErrorKind(process_error( + &format!("process didn't exit successfully: `{}`", self.debug_string()), + Some(&output.status), Some(&output))).into()) } else if let Some(e) = callback_error { Err(CargoError::with_chain(e, - CargoErrorKind::ProcessErrorKind( - process_error(&format!("failed to parse process output: `{}`", - self.debug_string()), Some(&output.status), Some(&output))))) + CargoErrorKind::ProcessErrorKind(process_error( + &format!("failed to parse process output: `{}`", self.debug_string()), + Some(&output.status), Some(&output))))) } else { Ok(output) } diff --git a/tests/cargotest/support/mod.rs b/tests/cargotest/support/mod.rs index 3a4e55653..8177785b2 100644 --- a/tests/cargotest/support/mod.rs +++ b/tests/cargotest/support/mod.rs @@ -719,7 +719,8 @@ impl<'a> ham::Matcher<&'a mut ProcessBuilder> for Execs { match res { Ok(out) => self.match_output(&out), - Err(CargoError(CargoErrorKind::ProcessErrorKind(ProcessError { output: Some(ref out), .. }), ..)) => { + Err(CargoError(CargoErrorKind::ProcessErrorKind( + ProcessError { output: Some(ref out), .. }), ..)) => { self.match_output(out) } Err(e) => { -- 2.30.2